package od_2025A.one;


import com.sun.deploy.util.StringUtils;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/**
 * https://blog.csdn.net/qq_45776114/article/details/146410579
 * 我理解这道题应该用栈来解决是比较合适，但是我对于栈的各种操作还是不熟悉哎。。。。
 * 之前左神的算法课，还是没有将基础打牢固，如果牢固了，这道题目，一读题目就应该想到用栈解决
 * 同时，还是要考虑边界条件呀
 */
public class Test04 {

    public static void main(String[] args) {
        // 1、获取数据
        Scanner scanner = new Scanner(System.in);
        // 2、将数据转成数组
        String str = scanner.nextLine();
        scanner.close();
        String[] strArray = str.split(" ");
        // 异常边界处理
        if (strArray[0].equals("D") || strArray[0].equals("C") || strArray[0].equals("+")) {
            System.out.println("-1");
        }
        // 3、创建一个新的数组：遍历原数组，模拟规则，将元素赋值给新数组
        LinkedList<Integer> stack = new LinkedList();
        stack.push(Integer.parseInt(strArray[0]));
        for (int i = 1; i < strArray.length; i++) {
            switch (strArray[i]) {
                case "C":
                    stack.pop();
                    break;
                case "D":
                    stack.push(stack.peek() * 2);
                    break;
                case "+":
                    if (stack.size() < 2) {
                        System.out.println("-1");
                        return;
                    } else {
                        Integer pop = stack.pop();
                        Integer peek = stack.peek();
                        stack.push(pop);
                        stack.push(peek + pop);
                    }
                    break;
                default:
                    stack.push(Integer.parseInt(strArray[i]));
                    break;
            }
        }
        int sum = stack.stream().mapToInt(Integer::intValue).sum();
        System.out.println(sum);
    }
}
